package com.ww.learn.coroutine

import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 * runBlocking与coroutineScope可能看起来很类似，因为它们都会等待其他协程体以及所有子协程结束。
 * 主要区别在于，runBlocking方法会阻塞当前线程等待，而coroutineScope只是挂起，会释放底层线程用于其他用途。
 * 由于存在这点差异，runBlocking是常规函数，而coroutineScope是挂起函数
 */
fun main() = runBlocking {
    launch {
        delay(200L)
        println("Task from runBlocking")
    }

    coroutineScope {
        launch {
            delay(500L)
            println("Task from nested launch")
        }

        delay(100L)
        println("Task from coroutine scope")
    }

    println("Coroutine scope is over")
}